/**
 * ajax请求模块
 */
define(function(require, exports, module){
	//依赖模块
	var $=require("jquery");
	var config=require("config");
	var components=require("components");
	//var md5=require("lib/md5");
	//参数初始化
	var getData=function(){
	};
	/**
	 * 请求图片表单ajax
	 * @param obj
	 */
	getData.uploadimg=function(obj){
		var _obj={
				page:"",
    			inter:"",
    			data:{},
    			method:"GET",
    			dataType:"json",
    			callback:function(){},
    			error:function(){}
		};
		//调用参数覆盖默认参数
		for(var o in obj){
			_obj[o]=obj[o];
		}
		//判断请求参数
		
		$.ajax({  
	          url: window._interfacePath+""+_pageConfig.content.uploadimg,
	          type: _obj.method,
	          data: _obj.data,
	          async: true,
	          cache: false,
	          contentType: false,
	          processData: false,
	          dataType:_obj.dataType,
	          success: function (returndata) {
        		  if(returndata.code==200){
	        		  var data=returndata.value;
	        		  if(data!=null){
	        			  _obj.callback(data);
	      			} 
	        	  }else{
	        		  $.alert(returndata.message);
	        	  }
	          },
	          error:function(err){
				  components.alert(err);
	          }
	     });
		
	};
	/**
	 * ajax得到json
	 * @param obj
	 */
	getData.getJson=function(obj){
		var _obj={
			page:"",
			inter:"",
			data:{},
			method:"GET",
			dataType:"json",
			callback:function(){},
			error:function(){}
		};
		//调用参数覆盖默认参数
		for(var o in obj){
			_obj[o]=obj[o];
		}
		_obj.data["appId"]="60c3fa21e92f4f52b30836bad42f8e0a";
		_obj.data["signtime"]=timest();


		var signstr=null;
		if(_obj.data!=null){
			var getarray=transform(_obj.data);
			var arraysort=getarray.sort();
			var getarraystr="ecd8d0c738cb6487cea6669f061048a8"+arraysort.join("");
			console.log(getarraystr);
			signstr=md5(getarraystr);
		}
		console.log(signstr.toUpperCase());
		_obj.data["signature"]=signstr.toUpperCase();
		//验证接口是否正确
    	var _url = config._pageConfig[_obj.page];
    	if(_url){
    		_url = _url[_obj.inter];
    		if(_url){

    		}else{
    			console.log("参数不对")
    		}
    	}else{
    		console.log("参数不对")
    	}

    	if(_obj.loading){
    		window._loading = new components.mask("loading");
    		window._loading.show();
    	}
    	$.ajax({
    		url: window._interfacePath + _url,
    		data:_obj.data,
    		type:_obj.method,
    		dataType:_obj.dataType,
    		success:function(data){
    			window._loading && window._loading.hide(); 
    			_obj.callback(data);
    		},
			complete:function(x){
				var msg= "";
				switch(x.status){
					case 200:

						break;
					case 403:
						msg= "服务器请求不可用，请稍后再试。";
						break;
					case 404:
						msg= "抱歉，请求异常，请稍后再试。";
						break;
					case 500:
						msg= "服务器内部错误，请与管理员取得联系，感谢。";
						break;
					case 12029:
						msg= "您当前的网络不稳定，请稍后再试。";
						break;
					default:
						msg= "当前网络不可用，请检查网络";
						break;
				}

				if(msg){
					window._loading && window._loading.hide();
					components.alert({
						val:msg,
						type:"flash",
						timer:6000
					});


				}
			},
            fail:_obj.error
    	});
	};
	/**
	 * jsonp得到数据
	 * @param obj
	 */
	getData.getjsonp=function(obj){
		var _obj={
				page:"",
				inter:"",
				data:{},
				method:"GET",
				dataType:"jsonp",
				callback:function(){},
				error:function(){}
			};
		//调用参数覆盖默认参数
		for(var o in obj){
			_obj[o]=obj[o];
		}
		//验证接口是否正确
    	var _url =config._pageConfig[_obj.page];
    	if(_url){
    		_url = _url[_obj.inter];
    		if(_url){

    		}else{
    			console.log("参数不对")
    		}
    	}else{
    		console.log("参数不对")
    	}

    	if(_obj.loading){
    		window._loading = new components.mask("loading");
    		window._loading.show();
    	}

    	//console.log(_option);
    	$.ajax({
    		url: window._interfacePath + _url,
    		data:_obj.data,
    		method:_obj.method,
    		dataType:_obj.dataType,
    		cache:false,
    		success:function(data){
    			window._loading && window._loading.hide(); 
    			_obj.callback(data);
    		},
    		complete:function(x){
    			var msg= "";
    			switch(x.status){
    				case 200:

    				break;
    				case 403:
    					msg= "服务器请求不可用，请稍后再试。";
    				break;
    				case 404:
    					msg= "抱歉，请求异常，请稍后再试。";
    				break;
    				case 500:
    					msg= "服务器内部错误，请与管理员取得联系，感谢。";
    				break;
    				case 12029:
    					msg= "您当前的网络不稳定，请稍后再试。";
    				break;
    				default:
    					msg= "当前网络不可用，请检查网络";
    				break;
    			}

    			if(msg){
    				window._loading && window._loading.hide();
					components.alert({
						val:msg,
						type:"flash",
						timer:6000
					});

    			}
    		},
    		error:_obj.error
    	});
	};
	/**
	 * xhr方式得到json
	 * @param obj
	 */
	getData.getXhrJson=function(obj){
		var _obj = {
    			page:"",
    			inter:"",
    			data:{},
    			method:"GET",
    			dataType:"json",
    			callback:function(){},
    			error:function(){}
    		};

		//调用传参数覆盖原始参数
		for(var k in obj){
			_obj[k] = obj[k];
		}
		//验证接口是否正确
		var _url =config._pageConfig[_obj.page];
		if(_url){
			_url = _url[_obj.inter];
			if(_url){
				
			}else{
				console.log("参数不对")
			}
		}else{
			console.log("参数不对")
		}

		if(_obj.loading){
			window._loading = new components.mask("loading");
			window._loading.show();
		}
		 var params = formatParams(_obj.data);

	        //创建 - 非IE6 - 第一步
	        if (window.XMLHttpRequest) {
	            var xhr = new XMLHttpRequest();
	        } else { //IE6及其以下版本浏览器
	            var xhr = new ActiveXObject('Microsoft.XMLHTTP');
	        }

	        //接收 - 第三步
	        xhr.onreadystatechange = function () {
	            if (xhr.readyState == 4) {
	                var status = xhr.status;
	                if (status >= 200 && status < 300) {
	                	_obj.callback(JSON.parse(xhr.responseText));
	                } else {
	                	_obj.error && _obj.error(status);
	                }
	            }
	        };

	        //连接 和 发送 - 第二步
	        if (_obj.method == "GET") {
	            xhr.open("GET", config._interfacePath + _url + "?" + params, true);
	            xhr.send(null);
	        } else if (_obj.method == "POST") {
	            xhr.open("POST", config._interfacePath + _url, true);
	            //设置表单提交时的内容类型
	            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	            xhr.send(params);
	        }
		
	};
	//格式化参数
    function formatParams(data) {
        var arr = [];
        for (var name in data) {
            arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
        }
        arr.push(("v=" + Math.random()).replace(".",""));
        return arr.join("&");
    }

	/**
	 * 获取 十位时间戳
	 * @returns {string}
     */
	function timest() {
		var tmp = Date.parse( new Date() ).toString();
		tmp = tmp.substr(0,10);
		return tmp;
	}

	/**
	 * 对象转成数组
	 * @param obj
	 * @returns {Array}
     */
	function transform(obj){
		var arr = [];
		for(var item in obj){
			if(obj[item]==undefined ||obj[item]==null)
				obj[item]="";
			arr.push(item+""+obj[item]);
		}
		return arr;
	}

	var rotateLeft = function(lValue, iShiftBits) {
		return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
	}

	var addUnsigned = function(lX, lY) {
		var lX4, lY4, lX8, lY8, lResult;
		lX8 = (lX & 0x80000000);
		lY8 = (lY & 0x80000000);
		lX4 = (lX & 0x40000000);
		lY4 = (lY & 0x40000000);
		lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
		if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
		if (lX4 | lY4) {
			if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
			else return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
		} else {
			return (lResult ^ lX8 ^ lY8);
		}
	}

	var F = function(x, y, z) {
		return (x & y) | ((~ x) & z);
	}

	var G = function(x, y, z) {
		return (x & z) | (y & (~ z));
	}

	var H = function(x, y, z) {
		return (x ^ y ^ z);
	}

	var I = function(x, y, z) {
		return (y ^ (x | (~ z)));
	}

	var FF = function(a, b, c, d, x, s, ac) {
		a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));
		return addUnsigned(rotateLeft(a, s), b);
	};

	var GG = function(a, b, c, d, x, s, ac) {
		a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));
		return addUnsigned(rotateLeft(a, s), b);
	};

	var HH = function(a, b, c, d, x, s, ac) {
		a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));
		return addUnsigned(rotateLeft(a, s), b);
	};

	var II = function(a, b, c, d, x, s, ac) {
		a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));
		return addUnsigned(rotateLeft(a, s), b);
	};

	var convertToWordArray = function(string) {
		var lWordCount;
		var lMessageLength = string.length;
		var lNumberOfWordsTempOne = lMessageLength + 8;
		var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64;
		var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16;
		var lWordArray = Array(lNumberOfWords - 1);
		var lBytePosition = 0;
		var lByteCount = 0;
		while (lByteCount < lMessageLength) {
			lWordCount = (lByteCount - (lByteCount % 4)) / 4;
			lBytePosition = (lByteCount % 4) * 8;
			lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
			lByteCount++;
		}
		lWordCount = (lByteCount - (lByteCount % 4)) / 4;
		lBytePosition = (lByteCount % 4) * 8;
		lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
		lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
		lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
		return lWordArray;
	};

	var wordToHex = function(lValue) {
		var WordToHexValue = "", WordToHexValueTemp = "", lByte, lCount;
		for (lCount = 0; lCount <= 3; lCount++) {
			lByte = (lValue >>> (lCount * 8)) & 255;
			WordToHexValueTemp = "0" + lByte.toString(16);
			WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2);
		}
		return WordToHexValue;
	};

	var uTF8Encode = function(string) {
		string = string.replace(/\x0d\x0a/g, "\x0a");
		var output = "";
		for (var n = 0; n < string.length; n++) {
			var c = string.charCodeAt(n);
			if (c < 128) {
				output += String.fromCharCode(c);
			} else if ((c > 127) && (c < 2048)) {
				output += String.fromCharCode((c >> 6) | 192);
				output += String.fromCharCode((c & 63) | 128);
			} else {
				output += String.fromCharCode((c >> 12) | 224);
				output += String.fromCharCode(((c >> 6) & 63) | 128);
				output += String.fromCharCode((c & 63) | 128);
			}
		}
		return output;
	};

	function md5(string) {
		var x = Array();
		var k, AA, BB, CC, DD, a, b, c, d;
		var S11=7, S12=12, S13=17, S14=22;
		var S21=5, S22=9 , S23=14, S24=20;
		var S31=4, S32=11, S33=16, S34=23;
		var S41=6, S42=10, S43=15, S44=21;
		string = uTF8Encode(string);
		x = convertToWordArray(string);
		a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
		for (k = 0; k < x.length; k += 16) {
			AA = a; BB = b; CC = c; DD = d;
			a = FF(a, b, c, d, x[k+0],  S11, 0xD76AA478);
			d = FF(d, a, b, c, x[k+1],  S12, 0xE8C7B756);
			c = FF(c, d, a, b, x[k+2],  S13, 0x242070DB);
			b = FF(b, c, d, a, x[k+3],  S14, 0xC1BDCEEE);
			a = FF(a, b, c, d, x[k+4],  S11, 0xF57C0FAF);
			d = FF(d, a, b, c, x[k+5],  S12, 0x4787C62A);
			c = FF(c, d, a, b, x[k+6],  S13, 0xA8304613);
			b = FF(b, c, d, a, x[k+7],  S14, 0xFD469501);
			a = FF(a, b, c, d, x[k+8],  S11, 0x698098D8);
			d = FF(d, a, b, c, x[k+9],  S12, 0x8B44F7AF);
			c = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1);
			b = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE);
			a = FF(a, b, c, d, x[k+12], S11, 0x6B901122);
			d = FF(d, a, b, c, x[k+13], S12, 0xFD987193);
			c = FF(c, d, a, b, x[k+14], S13, 0xA679438E);
			b = FF(b, c, d, a, x[k+15], S14, 0x49B40821);
			a = GG(a, b, c, d, x[k+1],  S21, 0xF61E2562);
			d = GG(d, a, b, c, x[k+6],  S22, 0xC040B340);
			c = GG(c, d, a, b, x[k+11], S23, 0x265E5A51);
			b = GG(b, c, d, a, x[k+0],  S24, 0xE9B6C7AA);
			a = GG(a, b, c, d, x[k+5],  S21, 0xD62F105D);
			d = GG(d, a, b, c, x[k+10], S22, 0x2441453);
			c = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681);
			b = GG(b, c, d, a, x[k+4],  S24, 0xE7D3FBC8);
			a = GG(a, b, c, d, x[k+9],  S21, 0x21E1CDE6);
			d = GG(d, a, b, c, x[k+14], S22, 0xC33707D6);
			c = GG(c, d, a, b, x[k+3],  S23, 0xF4D50D87);
			b = GG(b, c, d, a, x[k+8],  S24, 0x455A14ED);
			a = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905);
			d = GG(d, a, b, c, x[k+2],  S22, 0xFCEFA3F8);
			c = GG(c, d, a, b, x[k+7],  S23, 0x676F02D9);
			b = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A);
			a = HH(a, b, c, d, x[k+5],  S31, 0xFFFA3942);
			d = HH(d, a, b, c, x[k+8],  S32, 0x8771F681);
			c = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122);
			b = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C);
			a = HH(a, b, c, d, x[k+1],  S31, 0xA4BEEA44);
			d = HH(d, a, b, c, x[k+4],  S32, 0x4BDECFA9);
			c = HH(c, d, a, b, x[k+7],  S33, 0xF6BB4B60);
			b = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70);
			a = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6);
			d = HH(d, a, b, c, x[k+0],  S32, 0xEAA127FA);
			c = HH(c, d, a, b, x[k+3],  S33, 0xD4EF3085);
			b = HH(b, c, d, a, x[k+6],  S34, 0x4881D05);
			a = HH(a, b, c, d, x[k+9],  S31, 0xD9D4D039);
			d = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5);
			c = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8);
			b = HH(b, c, d, a, x[k+2],  S34, 0xC4AC5665);
			a = II(a, b, c, d, x[k+0],  S41, 0xF4292244);
			d = II(d, a, b, c, x[k+7],  S42, 0x432AFF97);
			c = II(c, d, a, b, x[k+14], S43, 0xAB9423A7);
			b = II(b, c, d, a, x[k+5],  S44, 0xFC93A039);
			a = II(a, b, c, d, x[k+12], S41, 0x655B59C3);
			d = II(d, a, b, c, x[k+3],  S42, 0x8F0CCC92);
			c = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D);
			b = II(b, c, d, a, x[k+1],  S44, 0x85845DD1);
			a = II(a, b, c, d, x[k+8],  S41, 0x6FA87E4F);
			d = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0);
			c = II(c, d, a, b, x[k+6],  S43, 0xA3014314);
			b = II(b, c, d, a, x[k+13], S44, 0x4E0811A1);
			a = II(a, b, c, d, x[k+4],  S41, 0xF7537E82);
			d = II(d, a, b, c, x[k+11], S42, 0xBD3AF235);
			c = II(c, d, a, b, x[k+2],  S43, 0x2AD7D2BB);
			b = II(b, c, d, a, x[k+9],  S44, 0xEB86D391);
			a = addUnsigned(a, AA);
			b = addUnsigned(b, BB);
			c = addUnsigned(c, CC);
			d = addUnsigned(d, DD);
		}
		var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
		return tempValue.toLowerCase();
	}
	//暴露对象
	module.exports = getData;
});